package bean

import (
	"reflect"
)

type Bean interface {
	Bean() string
	BeanStart()
	BeanEnd()
}

type InitialingBean interface {
	Bean
	Init() error
}

type DisposableBean interface {
	Bean
	Destroy() error
}

type NameAware interface {
	Bean
	SetBeanName(beanName string)
}

type PostProcessorBean interface {
	Bean
	PostProcessorBeforeInitialization(bean interface{}, beanName string) error
	PostProcessorAfterInitialization(bean interface{}, beanName string) error
}

type FactoryBean interface {
	Bean
	GetBean() (Bean, error)
	GetBeanType() reflect.Type
	IsSingleton() bool
}
